package top.tagao.m03_beHavioralPatterns.b_06_mediator;

import top.tagao.m03_beHavioralPatterns.b_06_mediator.components.*;
import top.tagao.m03_beHavioralPatterns.b_06_mediator.mediator.Editor;
import top.tagao.m03_beHavioralPatterns.b_06_mediator.mediator.Mediator;

import javax.swing.*;

/**
 * 中介者模式
 * @author Viktor_Liu
 * @Date 2022/8/13 23:02
 *
 * 1.Colleague: 抽象同事类
 *
 * 2.具体同事类 （Concrete Colleague） 是各种包含业务逻辑的类。 每个组件都有一个指向中介者的引用，
 *                     该引用被声明为中介者接口类型。 组件不知道中介者实际所属的类，
 *                      因此你可通过将其连接到不同的中介者以使其能在其他程序中复用。

 * 3. 中介者 （Mediator） 接口声明了与组件交流的方法， 但通常仅包括一个通知方法。
 *                    组件可将任意上下文 （包括自己的对象） 作为该方法的参数，
 *                    只有这样接收组件和发送者类之间才不会耦合。
 *
 * 4.具体中介者 （Concrete Mediator） 封装了多种组件间的关系。
 *    具体中介者通常会保存所有组件的引用并对其进行管理， 甚至有时会对其生命周期进行管理。
 */
public class Main {
    public static void main(String[] args) {
        Mediator mediator = new Editor();

        mediator.registerComponent(new Title());
        mediator.registerComponent(new TextBox());
        mediator.registerComponent(new AddButton());
        mediator.registerComponent(new DeleteButton());
        mediator.registerComponent(new SaveButton());
        mediator.registerComponent(new List(new DefaultListModel()));
        mediator.registerComponent(new Filter());

        mediator.createGUI();
    }
}
